/*
 * Created by LiuYou on 2020/11/27.
 *
 */

#ifndef EFFECTIVECPP_DERIVED_HPP
#define EFFECTIVECPP_DERIVED_HPP


#include "Base.hpp"

class Derived : public Base {
public:
    using Base::mf3;
public:
    void mf1() override;

    // 内层作用域屏蔽了外层作用域的名称。
    // 名称查找规则和名称遮掩规则
    // 以作用域为基础的名字遮掩规则不受继承的影响。而且还会影响继承(派生类无法继承基类的成员函数等)，
    // 即使基类和派生类的函数有不同的参数类型，或是继承的函数是virtual还是non-virtual都是适用的，
    // 名字遮掩规则都是会影响基类和派生类的继承(在派生类中遮掩屏蔽了基类的函数)。
    // 如果是 virtual 函数会很麻烦，但是如果是 non-virtual 函数可以 Base:: 作用域运算符调用屏蔽掉的函数，
    // 但是最好还是不要在派生类中声明与基类同名的 member function。
    void mf3();

    void mf4();
};


#endif //EFFECTIVECPP_DERIVED_HPP
